
import * as Cesium from "cesium";

export function LoadGLBFromURL(fileUrl: string, viewer: Cesium.Viewer,aimLon:number,aimLat:number): Promise<Cesium.Model> {
    // console.log('fileUrl:', fileUrl);

    // 将从GLTF创建模型的异步操作包装在一个新的Promise中
    return new Promise((resolve, reject) => {
        Cesium.Model.fromGltfAsync({
            url: fileUrl,
            modelMatrix: getModelMatrix(aimLon,aimLat),
            scale: 1,
        }).then((model) => {
            // 模型加载成功后添加到场景中
            model.readyPromise.then(function (loadedModel) {
                // console.log("模型加载成功！", loadedModel);
                
                // 添加模型到viewer的primitives集合中
                viewer.scene.primitives.add(loadedModel);

                // 解析Promise为加载的模型
                resolve(loadedModel);
            }).catch(function (error) {
                // 如果模型准备失败，则拒绝Promise
                console.error("模型加载失败！", error);
                reject(error);
            });
        }).catch((error) => {
            // 如果模型从GLTF创建失败，则拒绝Promise
            console.error("模型创建失败！", error);
            reject(error);
        });
    });
}

export async function LoadRiverGLBFromURL(fileUrl:string,viewer:Cesium.Viewer){
    console.log('fileUrl:',fileUrl);

    const model = await Cesium.Model.fromGltfAsync({
        url: fileUrl,
        modelMatrix: getRiverModleMatrix(),
        scale: 1,
    });
    
    
    // 使用 readyPromise 检查加载是否成功
    model.readyPromise.then(function (loadedModel) {
        console.log("模型加载成功！", loadedModel);
        // 可以在这里添加其他逻辑，例如飞到模型位置

        viewer.scene.primitives.add(loadedModel);

    }).catch(function (error) {
        console.error("模型加载失败！", error);
    });

    // console.log("加载的模型为：", model);
    
    
    return model;
}

function getRiverModleMatrix(){
    const longitude = 114.60210557096437;
    const latitude = 30.57613451056752;
    // const height = 121.0;

    return getModelMatrix(longitude,latitude);
}


function getModelMatrix(longitude:number,latitude:number,height:number = -10){

    const position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
    // 针对中国区域的旋转情况
    const heading = Cesium.Math.toRadians(90);//在地球表面（东西南北方向上），绕南北方向旋转
    const pitch = Cesium.Math.toRadians(90);//在垂直及东西方向的平面上，绕垂直方向旋转
    const roll = Cesium.Math.toRadians(0);//在垂直向上及南北方向面上，绕垂直方向旋转
    // const orientation = Cesium.Transforms.headingPitchRollQuaternion(position, new Cesium.HeadingPitchRoll(heading, pitch, roll));

    let matrix = Cesium.Transforms.headingPitchRollToFixedFrame(position, new Cesium.HeadingPitchRoll(heading, pitch, roll));
    return matrix
}

// // 设置视角固定在武汉长江段
// const cameraLon = 113.955282;
// const cameraLat = 30.206550;
// const cameraHeight = 135000.0;
// const cameraPosition = Cesium.Cartesian3.fromDegrees(cameraLon, cameraLat, cameraHeight);

// function SetCameraView(viewer:Cesium.Viewer,cameraPosition:Cesium.Cartesian3){
//     // 设置相机视图
//     viewer.camera.setView({
//         destination: cameraPosition,
//         orientation: {
//             heading: Cesium.Math.toRadians(345),
//             pitch: Cesium.Math.toRadians(-90),
//             roll: 0
//         }
//     });
//     return;
// }

